package com.habdqn.easybuy.service.impl;

import com.habdqn.easybuy.dao.ProductCategoryDao;
import com.habdqn.easybuy.dao.ProductDao;
import com.habdqn.easybuy.dao.impl.ProductCategoryDaoImpl;
import com.habdqn.easybuy.dao.impl.ProductDaoImpl;
import com.habdqn.easybuy.entity.Product;
import com.habdqn.easybuy.service.ProductService;
import com.habdqn.easybuy.util.Page;

/**
 * @author Xing.Jiejian
 * @date 2020/11/30
 */
public class ProductServiceImpl implements ProductService {
    private ProductDao productDao = new ProductDaoImpl();
    private ProductCategoryDao productCategoryDao = new ProductCategoryDaoImpl();

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    @Override
    public Product queryById(Integer id) {
        return queryById(id,false);
    }

    /**
     * 通过ID查询单条数据
     *
     * @param id             主键
     * @param isWithCategory 关联分类对象
     * @return 实例对象
     */
    @Override
    public Product queryById(Integer id, boolean isWithCategory) {
        Product product = productDao.queryById(id);
        if (isWithCategory){
            product.setCategory(productCategoryDao.queryById(product.getCategoryId()));
        }
        return product;
    }

    /**
     * 获取分页数据
     *
     * @param product 查询条件
     * @param page    分页对象
     * @return 分页对象
     */
    @Override
    public Page<Product> queryByPage(Product product, Page<Product> page, boolean isWithCategory) {
        // 获取分页集合
        page.setRows(productDao.queryAll(product, page));
        // 获取总记录数
        page.setTotal(productDao.getTotal(product));
        // 关联对象
        if (isWithCategory) {
            page.getRows().forEach(p -> {
                p.setCategory(productCategoryDao.queryById(p.getCategoryId()));
            });
        }
        return page;
    }

    /**
     * 根据分类编号获取分页商品列表
     *
     * @param cIds 分类编号，多个编号用","隔开
     * @param page 分页参数
     * @return 分页商品集合
     */
    @Override
    public Page<Product> queryByPageAndCategoryIds(String cIds, Page<Product> page) {
        // 获取分页集合
        page.setRows(productDao.queryAll(cIds, page));
        // 获取总记录数
        page.setTotal(productDao.getTotal(cIds));
        return page;
    }

    /**
     * 新增数据
     *
     * @param product 实例对象
     * @return 实例对象
     */
    @Override
    public Product insert(Product product) {
        product.setId(productDao.insert(product));
        return product;
    }

    /**
     * 修改数据
     *
     * @param product 实例对象
     * @return 实例对象
     */
    @Override
    public Product update(Product product) {
        if (productDao.update(product) > 0) {
            return product;
        }
        return null;
    }

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    @Override
    public boolean deleteById(Integer id) {
        return productDao.deleteById(id) > 0;
    }
}
